package com.sjh.zlock;

import org.apache.curator.framework.recipes.locks.InterProcessLock;

import java.util.concurrent.TimeUnit;

/**
 * 这里实现共享锁 的方法
 * 共享可重入锁，共享可重入读写锁，共享信号量，多重共享锁  请自己尝试
 * @author jack
 * @data 2020/8/19 5:39 下午
 */
public interface DistributedZLock {
    /**
     * 加锁
     * 拿不到lock就不罢休，不然线程就一直block
     * @param lock 锁
     * @return
     */
    void lock(InterProcessLock lock);


    /**
     * 获取锁
     * @param lockKey 锁名
     * @return
     */
    InterProcessLock getLock(String lockKey);


    /**
     * 在 waitTime 时间内 加锁，超过waitTime 将结束等待 返回false
     * @param lock 锁
     * @param unit 时间单位
     * @param waitTime 等待时间
     * @return
     */
    boolean tryLock(InterProcessLock lock, TimeUnit unit, long waitTime);


    /**
     * 在 waitTime（默认5秒） 时间内 尝试加锁，超过waitTime(10秒) 将结束等待 返回false
     * @param lock
     * @return
     */
    boolean tryLock(InterProcessLock lock);

    /**
     * 解锁
     * @param lock
     */
    void unlock(InterProcessLock lock);


}
